package com.yehongyu.mytools.basic.designpattern.singleton;

import java.util.HashMap;

/**
 * 这是一个单例注册类，通过它可以只产生一个类实例。
 * 工厂就是通过它生成唯一实例的。
 * @author hp
 *
 */
public class SingletonRegistry {
	public static SingletonRegistry REGISTRY = new SingletonRegistry();
	
	private static HashMap<String,Object> map = new HashMap<String,Object>();
	protected SingletonRegistry() {
		//防止被实例化，但是我认为还可以被子类和同一包的类实例化
	}
	public static synchronized Object getInstance(String classname){
		Object singleton = map.get(classname);
		
		if(singleton!=null){
			return singleton;
		}
		try{
			singleton = Class.forName(classname).newInstance();
			System.out.println("创建实例：" + singleton);
		}catch(ClassNotFoundException cnf){
			System.out.println("找不到此类：" + classname);
		}catch(InstantiationException ie){
			System.out.println("不能实例此类型的对象：" + classname);
		}catch(IllegalAccessException ia){
			System.out.println("不能访问类：" + classname);
		}
		map.put(classname,singleton);
		return singleton;
	}
	

}
